package modelo;

import geometria.*;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;

import ar.uba.fi.algo3.titiritero.Posicionable;

/**
 * 
 * Este avion busca solo una pista y se dirige a ella sin intervencion del
 * usuario.
 * 
 */
public class AvionComputarizado extends AeroNave implements Posicionable {

	private Pista pistaDestino;
	private boolean rutaFijada;

	public AvionComputarizado(Coordenada posicionIni)
			throws PistaNoDisponibleException {

		super(posicionIni);
		this.carreteo = 50D;
		this.peso = 50D;
		this.ancho = 40D;
		this.alto = this.ancho;
		this.pistaDestino = null;
		this.rutaFijada = false;
		limites = new Circunferencia(this.posicion, this.alto);
		Random random = new Random();
		velocidad = new Velocidad(random.nextDouble(), random.nextDouble());
		velocidad.setModulo(this.getModuloVelocidadDefault());

		this.setPistaDestino();
		this.setRuta();

	}

	@Override
	public void agregarPuntoATrayectoria(Coordenada nuevoPunto) {
		if (this.rutaFijada)
			return;
		else
			super.agregarPuntoATrayectoria(nuevoPunto);
	}

	private void setRuta() {
		Pista paux = this.pistaDestino;
		Coordenada primerPunto = paux.getCabecera().getPuntoMedio();
		Coordenada segundoPunto = paux.getPosicion();
		this.agregarPuntoATrayectoria(primerPunto);
		this.agregarPuntoATrayectoria(segundoPunto);
		this.rutaFijada = true;
	}

	private void setPistaDestino() throws PistaNoDisponibleException {
		ArrayList<Pista> lista = Escenario.getInstance().getEstaticos();
		Iterator<Pista> i = lista.iterator();
		Pista paux = null;
		while (i.hasNext()) {
			paux = i.next();
			if (this.esAterrizableEn(paux)) {
				this.pistaDestino = paux;
				return;
			}
		}

		throw new PistaNoDisponibleException();
	}

	public Pista getPistaDestino() {
		return pistaDestino;
	}

	protected Double getModuloVelocidadDefault() {
		return 12D;
	}

}
